package timing.ukulele.storage.config;

import lombok.*;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "ukulele.storage")
@Data
public class StorageClientProperties {
    /**
     * endPoint是一个URL，域名，IPv4或者IPv6地址。以下是合法的endpoints:
     * https://s3.amazonaws.com</p>
     * https://play.min.io
     * localhost
     * play.min.io
     */
    private String endpoint;
    /**
     * TCP/IP端口号。可选，默认值是，如果是http,则默认80端口，如果是https,则默认是443端口。
     */
    private Integer port;
    /**
     * accessKey类似于用户ID，用于唯一标识你的账户
     */
    private String accessKey;
    /**
     * secretKey是你账户的密码
     */
    private String secretKey;
    /**
     * 如果是true，则用的是https而不是http,默认值是true
     */
    private Boolean secure;
    /**
     * Endpoint URL对象
     */
    private String urlString;
    /**
     * Endpoint HttpUrl对象
     */
    private String httpUrlString;


    /**
     * 文件、图片等上传下载访问基地址地址，如果minio被nginx代理，需要配置这个参数为代理后的前端访问地址
     */
    private String baseUrl;

    /**
     * 上传预签名URL有效期，单位为分钟
     * 可选参数，默认值为60分钟
     */
    private Integer uploadExpiry = 60;

    /**
     * 下载和预览预签名URL有效期，单位为分钟
     * 可选参数，默认值为10分钟
     */
    private Integer downloadExpiry = 10;

    /**
     * 分块配置
     */
    private Part part = new Part();

    @NoArgsConstructor
    @AllArgsConstructor
    @Getter
    @Setter
    public static class Part {

        /**
         * 是否开启分块策略，默认为true
         */
        private boolean enable = true;

        /**
         * 分块大小，配置单位为byte，默认为5242880(5MB)
         */
        private int size = 5242880;

        /**
         * 分块上传时建议并发数，默认为3
         */
        private int iis = 3;
    }
}
